package com.heima.service.impl;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.heima.mapper.NodeMapper;
import com.heima.mapper.RegionMapper;
import com.heima.pojo.dto.PageQueryDTO;
import com.heima.pojo.dto.RegionDTO;
import com.heima.pojo.entity.Node;
import com.heima.pojo.entity.Region;
import com.heima.pojo.vo.RegionVO;
import com.heima.result.PageResult;
import com.heima.service.RegionService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;

@Slf4j
@Service
public class RegionServiceImpl implements RegionService {
    @Autowired
    RegionMapper regionMapper;
    @Autowired
    NodeMapper nodeMapper;

    /**
     * 添加区域
     */

    @Override
    public Boolean add(RegionDTO dto) {
        // 判断名称是够重复
        //TODO 未设置全局异常
        if (dto.getRegionName() == regionMapper.selectName(dto.getRegionName())) {
            log.info("名字重复");
        }
        Region region = new Region();
        region.setName(dto.getRegionName());
        region.setRemark(dto.getRemark());
        Integer result = regionMapper.add(dto);
        return result > 0;
    }

    /**
     * 区域查询
     */
    @Override
    public PageResult<RegionVO> pageQuery(PageQueryDTO dto) {
        PageHelper.startPage(dto.getPageIndex(), dto.getPageSize());
        Page<RegionVO> page = regionMapper.pageQuery(dto);
        for (RegionVO regionVO : page) {
            List<Node> listByRegionId = nodeMapper.select(regionVO.getId());
            regionVO.setNodeList(null);
            regionVO.setNodeCount(listByRegionId.size());
        }
        return new PageResult<>(dto.getPageIndex(), dto.getPageSize(), page.getPages(), page.getTotal(), page.getResult());
    }

    /**
     * 根据id区域删除
     */
    @Override
    public Boolean delete(Long id) {
        return regionMapper.deleteById(id) > 0;
    }

    /**
     * 修改区域
     */
    @Override
    public Boolean update(Long id, RegionDTO dto) {
        Region region = new Region();
        region.setId(id);
        region.setName(dto.getRegionName());
        region.setRemark(dto.getRemark());
        Integer result = regionMapper.update(region);
        return result > 0;
    }

}
